﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Packaging;
using System.IO;

namespace DS2171Utils
{
   public class Documento
    {

        //Il secondo parametro string del dictionary :  System.Net.Mime.MediaTypeNames 
       private static void CreatePackage(IDictionary<string,string> pPathResources)
        {
            if (pPathResources == null) return;
            // Convert system path and file names to Part URIs. In this example
            // Uri partUriDocument /* /Content/Document.xml */ =
            //     PackUriHelper.CreatePartUri(
            //         new Uri("Content\Document.xml", UriKind.Relative));
            // Uri partUriResource /* /Resources/Image1.jpg */ =
            //     PackUriHelper.CreatePartUri(
            //         new Uri("Resources\Image1.jpg", UriKind.Relative));
           
            IList<Uri> partUriResList = null;

            foreach (var respath in pPathResources.Keys)
            {
                partUriResList.Add ( PackUriHelper.CreatePartUri(
                                      new Uri(respath, UriKind.RelativeOrAbsolute )));
            }

            var packagePath = ""; //memoria ?
            // Create the Package
            // (If the package file already exists, FileMode.Create will
            //  automatically delete it first before creating a new one.
            //  The 'using' statement insures that 'package' is
            //  closed and disposed when it goes out of scope.)
            using (Package package =
                Package.Open(packagePath, FileMode.Create))
            {
                // Add the Document part to the Package
                PackagePart packagePartDocument =
                    package.CreatePart(partUriDocument,
                                   System.Net.Mime.MediaTypeNames.Text.Xml);

                // Copy the data to the Document Part
                using (FileStream fileStream = new FileStream(
                       documentPath, FileMode.Open, FileAccess.Read))
                {
                    CopyStream(fileStream, packagePartDocument.GetStream());
                }// end:using(fileStream) - Close and dispose fileStream.

                // Add a Package Relationship to the Document Part
                package.CreateRelationship(packagePartDocument.Uri,
                                           TargetMode.Internal,PackageRelationshipType);

                // Add a Resource Part to the Package
                PackagePart packagePartResource =
                    package.CreatePart(partUriResource, System.Net.Mime.MediaTypeNames.Image.Jpeg);

                // Copy the data to the Resource Part
                using (FileStream fileStream = new FileStream(
                       resourcePath, FileMode.Open, FileAccess.Read))
                {
                    CopyStream(fileStream, packagePartResource.GetStream());
                }// end:using(fileStream) - Close and dispose fileStream.

                // Add Relationship from the Document part to the Resource part
                packagePartDocument.CreateRelationship(
                                        new Uri(@"../resources/image1.jpg",
                                        UriKind.Relative),TargetMode.Internal,
                                        ResourceRelationshipType);

            }// end:using (Package package) - Close and dispose package.

        }// end:CreatePackage()

       private static void CopyStream(Stream source, Stream target)
       {
           const int bufSize = 0x1000;
           byte[] buf = new byte[bufSize];
           int bytesRead = 0;
           while ((bytesRead = source.Read(buf, 0, bufSize)) > 0)
               target.Write(buf, 0, bytesRead);
       }// end:CopyStream()


       public void getDocParts(Package pPackage)
       {
           var toSign = new System.Collections.Generic.List<Uri>();
           foreach (PackagePart packagePart in pPackage.GetParts())
           {
               toSign.Add(packagePart.Uri);
           }
       
       }//fM

    }//fC
}
